﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ModelUML
{
    public class NameException : Exception
    {
        KlasaUML klasa1, klasa2;
        public NameException(KlasaUML a, KlasaUML b) : base("Istnieje inna klasa o tej samej nazwie")
        {            
            klasa1 = b;
            klasa2 = a;
        }
        public void Scal()
        {            
            List<AtrybutUML> atrList = new List<AtrybutUML>();
            foreach (AtrybutUML atr in klasa1.atrybuty)
            {
                atrList.Add(atr);
            }
            atrList.Reverse();

            List<OperacjaUML> opeList = new List<OperacjaUML>();
            foreach (OperacjaUML ope in klasa1.operacje)
            {
                opeList.Add(ope);
            }
            opeList.Reverse();

            if (klasa1.lista_iKlas.Count > 0)
            {
                iKlasaUML kl = klasa1.lista_iKlas[0];
                foreach (AtrybutUML atr in klasa2.atrybuty)
                {
                    kl.DodajAtrybut(atr, false);
                }
                foreach (OperacjaUML ope in klasa2.operacje)
                {
                    kl.DodajOperacje(ope, false);
                }
            }
            if (klasa2.lista_iKlas.Count > 0)
            {
                iKlasaUML kl1 = klasa2.lista_iKlas[0];
                foreach (AtrybutUML atr in atrList)
                {
                    kl1.DodajAtrybutEnd(atr, false);
                }
                foreach (OperacjaUML ope in opeList)
                {
                    kl1.DodajOperacjeEnd(ope, false);
                }
            }
            foreach (iKlasaUML ikl in klasa2.lista_iKlas)
            {
                klasa1.lista_iKlas.Add(ikl);
                ikl.SetElement(klasa1);
            }
            klasa2.lista_iKlas.Clear();
            
            foreach (iDiagram di in klasa2.diagramy)
            {
                klasa1.diagramy.Add(di);
            }

            klasa2.diagramy.Clear();            
            Model1.staticModel.UsunElementZModelu(klasa2);            
        }
    }
}
